package com.yztctech.a14_01_customprovider;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.support.annotation.Nullable;
import android.util.Log;

/**
 * Created by bodhixu on 2016/9/9.
 * 自定义ContentProvider
 * 备注:
 * 1. 路径的含义是双方协商规定的
 * 2. 这里用到的UriMatcher是为了创建uri规则
 *
 */
public class CustomProvider extends ContentProvider{

    //Uri常量
    //权威Authority：一般使用包名+类名的格式，全部是小写;相当于uri的域名
    public static final String AUTHORITY = "com.yztctech.a14_01_customprovider.customprovider";
    //表名;即path
    public static final String PATH_STUDENT = "student";
    public static final String PATH_STUDENT_ITME = "student/#"; //通配符：*所有字符，#所有数字

    //匹配规则的常量
    public static final int MATCH_CODE_STU_DIR = 100; //匹配student的全部数据
    public static final int MATCH_CODE_STU_ITME = 101; //匹配student的单条数据

    //创建Uri的配置规则
    //创建匹配器:参数=如果匹配不上，返回的匹配码
    static UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    //添加匹配规则
    {
        uriMatcher.addURI(AUTHORITY, PATH_STUDENT, MATCH_CODE_STU_DIR);
        uriMatcher.addURI(AUTHORITY, PATH_STUDENT_ITME, MATCH_CODE_STU_ITME);
    }

    //定义DBHelper和SQLiteDatabase对象
    private DBHelper dbHelper;
    private SQLiteDatabase db;

    //当有第三方应用访问我的Provider的时候，会触发
    //或者当我自身启动的时候，也会触发该方法，准备把数据发布出去
    //该方法一般用来做初始化操作
    @Override
    public boolean onCreate() {
        dbHelper = new DBHelper(getContext());
        db = dbHelper.getReadableDatabase();
        return false;
    }

    //插入数据
    //本类不用手动调用，给其他应用程序调用的
    //其他应用程序通过ContentResolver发布insert命令的时候，自动触发
    //参数1：往哪个表插入数据，参数2：具体插入的数据
    //@Nullable:表示参数允许为空
    /**
     * 增
     * */
    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
        Log.e("Tag","-------------------> insert");
        //匹配Uri，判断对方的意图
        int matchCode = uriMatcher.match(uri);
        switch (matchCode) {
            case MATCH_CODE_STU_DIR:
                //要往学生表内插数据
                db.insert("student",null, contentValues);


                break;
            case MATCH_CODE_STU_ITME:
                break;
        }

        return null;
    }

    /**
     * 查
     * */
    @Nullable
    @Override
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
        return null;
    }

    /**
     * 删
     * */
    @Override
    public int delete(Uri uri, String s, String[] strings) {
        return 0;
    }
    /**
     * 改
     * */
    @Override
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
        return 0;
    }

    /**
     * 返回ContentProvider数据的Mime类型
     * Mime类型有两种
     1、"vnd.android.cursor.dir"，对应多行数据
     2、"vnd.android.cursor.item"，对应单行数据
     * */
    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }


}
